iT邦幫忙

2022 iThome 鐵人賽

DAY 6
1

前言

API 測試可以做為後端API的一道防線, 或是在RD重構的時候, 提供一個保護, 或是平日每天掃一遍, 看enviroment裡面有沒有服務掛掉

測試目標 Swagger UI

https://ithelp.ithome.com.tw/upload/images/20220906/20142397WazPMOOt0a.png
先附上圖片
通常自動化QA會根據API文件來做測試, Swagger UI就是很好用的一種,
關鍵資訊有:

  1. HOST
  2. API PATH
  3. headers
  4. parameter
  5. payload ( body )
    大概有印象就可以, 請往下看

什麼是 http request

基本概念

  • http是建立在tcp上面, 就是界面跟界面之間透過網路的一種方式, 溝通方式還有很多, 例如 websocket, tcp socket, RPC呼叫 等等....
    但 http request 就是最常見以及最容易使用的其中一種, 也就是大家常說的 RESTful API

  • 因為一般server或是API Gateway, 用 RESTful比較多(就是一般的http request)
    http request 根據 RFC2616(https://www.ietf.org/rfc/rfc2616.txt) 訂出的規則, 目前業界常用的
    GET (抓取資料 觀念對應 CRUD裡面的 R:read)
    POST (新增資料 對應 CRUD C:create)
    PUT (修改資料 對應 CRUD U:update)
    DELETE (刪除資料 對應 CRUD D:delete)

  • 剛開始不熟建議先用 get來做測試
    一個最常做的快速測試:打開瀏覽器 網址裡面輸入 https://google.com, 按下enter
    意思就是對 https://google.com 做一個 get 的 http request
    另一個常做的快速測試(需安裝好curl): $ curl https://google.com
    應該會看到回應

做 http request的幾種工具

  1. curl
    通常linux/mac會內建, win的話應該要另外裝(https://reurl.cc/eOkDOx)
curl https://google.com 
  1. postman
    安裝 postman
    https://ithelp.ithome.com.tw/upload/images/20220907/20142397bwMVvzSFDp.png
    自動化QA會很常使用這個工具, 可以稍微熟悉一下

    1. 語言 http library
  • nodejs node-fetch ( 回傳要處理promise, 會建議熟js再用這個 )
  • python requests ( 方便快速 )

pytest 做基本的 http request assert

安裝 requests

pip3 install requests

pytest status_code assert

$ cat test_http_request.py
在檔案放入以下內容

import requests

def test_http_request():
    res = requests.get('https://google.com')
    print(res)
    assert res.status_code == 200

$ pytest test_http_request.py --capture=no
預期會 1 passed, 並看到 Response [200]

以上就是最基本的 API test happy pass
都針對 API做200測試, 把路先打通

[進階] 自己建立 API server 及 Swagger UI 來做測試

使用超方便的 fastapi 來完成任務吧
[建議] 直接跟著官往做, 因為寫得很簡單明瞭( https://fastapi.tiangolo.com/ )
官網記得往下滾到 Installation 開始跟

  1. $ pip3 install fastapi
  2. $ pip3 install "uvicorn[standard]"
  3. $ cat main.py //然後放入以下程式碼
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}
  1. uvicorn main:app --reload
  2. 開瀏覽器, 輸入 http://127.0.0.1:8000/items/5?q=somequery
    預期結果:{"item_id": 5, "q": "somequery"}
  3. 開另一個網頁, 輸入 http://127.0.0.1:8000/docs
    預期結果:
    https://ithelp.ithome.com.tw/upload/images/20220907/20142397K7uZdWRCDU.png

測試
$ curl http://localhost:8000/items/5?q=somequery

這篇就先簡單介紹到這裡, 等有空把 API server補上再更新多一些例子囉


上一篇
0x08 Pytest測試框架 教學
系列文
從零開始的自動化QA學習之路9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言